﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PUCP.SI2.SGIRP.DA.DAOLocales;
using PUCP.SI2.SGIRP.BE;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Data;

namespace PUCP.SI2.SGIRP.DA.DAOContrato
{
    public class ContratoDA
    {
        public List<ContratoBE> ContratosListar()
        {
            List<ContratoBE> lstContratos = new List<ContratoBE>();
            MySqlCommand cmd = null;
            ContratoBE contrato;

            try
            {
                MySqlConnection conn = new coneccion().getInstance();
                conn.Open();

                cmd = new MySqlCommand("SELECT C.codigo, CC.nombre,L.codigoLocal,CL.razonSocial, NC.nombreCom,C.fecInicio, C.fecFin, C.estadoContrato "
                + "FROM contrato C INNER JOIN centro_comercial CC ON C.codCC = CC.codigo INNER JOIN `local` L ON C.codLocal = L.codigo " +
                "INNER JOIN cliente CL  ON C.codCliente = CL.codigo INNER JOIN nombre_comercial NC ON C.codNombCom = NC.codigo",conn) ;

                MySqlDataReader dr = cmd.ExecuteReader();

                while(dr.Read())
                {
                    contrato = new ContratoBE();

                    contrato.Codigo = Convert.ToInt32(dr["codigo"]);

                    CentroComercialBE cc = new CentroComercialBE();
                    cc.Nombre = dr["nombre"].ToString();
                    contrato.CentroComercial = cc;

                    LocalBE local = new LocalBE();
                    local.CodigoLocal = dr["codigoLocal"].ToString();
                    contrato.Local = local;

                    ClienteBE cliente = new ClienteBE();
                    cliente.RazonSocial = dr["razonSocial"].ToString();
                    contrato.Cliente = cliente;

                    NombreComercialBE nombCom = new NombreComercialBE();
                    nombCom.Nombre = dr["nombreCom"].ToString();
                    contrato.Nombrecomercial = nombCom;

                    contrato.FechaInicio = Convert.ToDateTime(dr["fecInicio"]);

                    contrato.FechaFin = Convert.ToDateTime(dr["fecFin"]);

                    contrato.EstadoContrato = dr["estadoContrato"].ToString();

                    lstContratos.Add(contrato);
                }
                return lstContratos;
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        public List<ContratoBE> ContratosBuscar(string client, string codigo, string estado)
        {
            List<ContratoBE> lstContratos = new List<ContratoBE>();
            MySqlCommand cmd = null;
            ContratoBE contrato;
            int cont = 0;

            try
            {
                if(client != string.Empty)
                    cont++;
                if(codigo != string.Empty)
                    cont++;
                if(estado != string.Empty)
                    cont++;

                MySqlConnection conn = new coneccion().getInstance();
                conn.Open();

                string query = "SELECT C.codigo, CC.nombre,L.codigoLocal,CL.razonSocial, NC.nombreCom,C.fecInicio, C.fecFin, C.estadoContrato "
                + "FROM contrato C INNER JOIN centro_comercial CC ON C.codCC = CC.codigo INNER JOIN `local` L ON C.codLocal = L.codigo " +
                "INNER JOIN cliente CL  ON C.codCliente = CL.codigo INNER JOIN nombre_comercial NC ON C.codNombCom = NC.codigo WHERE ";

                if(client != string.Empty)
                {
                    query = query + " UPPER(CL.razonSocial) = UPPER('" + client + "')";
                    if(cont > 1)
                    {
                        query = query + " AND";
                        cont--;
                    }
                }

                if(codigo != string.Empty)
                {
                    query = query + " C.codigo = " + codigo;
                    if(cont > 1)
                    {
                        query = query + " AND ";
                        cont--;
                    }
                }

                if(estado != string.Empty)
                {
                    query = query + " UPPER(C.estadoContrato) = UPPER('" + estado + "')";
                    if(cont > 1)
                    {
                        query = query + " AND ";
                        cont--;
                    }
                }

                cmd = new MySqlCommand(query, conn);

                MySqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    contrato = new ContratoBE();

                    contrato.Codigo = Convert.ToInt32(dr["codigo"]);

                    CentroComercialBE cc = new CentroComercialBE();
                    cc.Nombre = dr["nombre"].ToString();
                    contrato.CentroComercial = cc;

                    LocalBE local = new LocalBE();
                    local.CodigoLocal = dr["codigoLocal"].ToString();
                    contrato.Local = local;

                    ClienteBE cliente = new ClienteBE();
                    cliente.RazonSocial = dr["razonSocial"].ToString();
                    contrato.Cliente = cliente;

                    NombreComercialBE nombCom = new NombreComercialBE();
                    nombCom.Nombre = dr["nombreCom"].ToString();
                    contrato.Nombrecomercial = nombCom;

                    contrato.FechaInicio = Convert.ToDateTime(dr["fecInicio"]);

                    contrato.FechaFin = Convert.ToDateTime(dr["fecFin"]);

                    contrato.EstadoContrato = dr["estadoContrato"].ToString();

                    lstContratos.Add(contrato);
                }
                return lstContratos;
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        public DataTable gtCmbNombreComercial()
        {
            //codigoCC = codigo de Centro comerical
            DataTable dtNombreC = null;
            MySqlConnection conn = new coneccion2().getInstance();
            MySqlDataAdapter daNombreC = null;
            conn.Open();
            String sqlString = "select nombreCom, codigo from nombre_comercial order by 1";

            //MySqlCommand cmd = new MySqlCommand(sqlString, conn);
            // MySqlDataReader rd = cmd.ExecuteReader();
            daNombreC = new MySqlDataAdapter(sqlString, conn);
            dtNombreC = new DataTable("nombre_comercial");
            daNombreC.Fill(dtNombreC);

            return dtNombreC;
        }
        public DataTable AddContrato(int codNombCom,int codCC,int codLocal,String horarioAtenc,String fecInicio,String fecFin)
        {
            //codigoCC = codigo de Centro comerical
            DataTable dtNombreC = null;
            MySqlConnection conn = new coneccion2().getInstance();
            MySqlDataAdapter daNombreC = null;
            conn.Open();
            String sqlString = "insert into contrato(codNombCom,codCC,codLocal,horarioAtenc,fecInicio,fecFin) "+
                                "values("+codNombCom+","+codCC+", '"+codLocal+"', '"+horarioAtenc+"', '"+fecInicio+"', '"+fecFin+"')";

            //MySqlCommand cmd = new MySqlCommand(sqlString, conn);
            // MySqlDataReader rd = cmd.ExecuteReader();
            daNombreC = new MySqlDataAdapter(sqlString, conn);
            dtNombreC = new DataTable("nombre_comercial");
            daNombreC.Fill(dtNombreC);

            return dtNombreC;
        }
    }
}
